﻿using System;

namespace Battle.Net
{
// ReSharper disable InconsistentNaming

    internal class StringValue : Attribute
    {
        public StringValue(string value)
        {
            Value = value;
        }

        public string Value { get; set; }
    }

    public enum ErrorReasons
    {
        NonGenericException = 0,
        [StringValue("Invalid Application")]
        InvalidApplication = 1,
        [StringValue("Invalid application permissions.")]
        InvalidApplicationPermissions = 2,
        [StringValue("Access denied, please contact api-support@blizzard.com")]
        AccessDenied = 3,
        [StringValue("When in doubt, blow it up. (page not found)")]
        PageNotFound = 4,
        [StringValue("If at first you don't succeed, blow it up again. (too many requests)")]
        TooManyRequests = 5,
        [StringValue("Have you not been through enough? Will you continue to fight what you cannot defeat? (something unexpected happened)")]
        InternalServerError = 6,
        [StringValue("Invalid authentication header.")]
        InvalidAuthenticationHeader = 7,
        [StringValue("Invalid application signature.")]
        InvalidApplicationSignature = 8
    }

    public enum Host
    {
        [StringValue("eu.battle.net")]
        Europe = 1,
        [StringValue("us.battle.net")]
        America = 2,
        [StringValue("kr.battle.net")]
        Korea = 3,
        [StringValue("tw.battle.net")]
        Tawain = 4,
        [StringValue("www.battlenet.com.cn")]
        China = 5
    }

    public enum Locale
    {
        [StringValue("en_US")]
        en_US = 1,
        [StringValue("en_MX")]
        en_MX = 2,
        [StringValue("pt_BR")]
        pt_BR = 3,
        [StringValue("en_GB")]
        en_GB = 4,
        [StringValue("es_ES")]
        es_ES = 5,
        [StringValue("fr_FR")]
        fr_FR = 6,
        [StringValue("ru_RU")]
        ru_RU = 7,
        [StringValue("de_DE")]
        de_DE = 8,
        [StringValue("pt_PT")]
        pt_PT = 9,
        [StringValue("it_IT")]
        it_IT = 10,
        [StringValue("ko_KR")]
        ko_KR = 11,
        [StringValue("zh_TW")]
        zh_TW = 12,
        [StringValue("zh_CN")]
        zh_CN = 13
    }

    public enum CharacterClass
    {
        Hunter = 3,
        Rogue = 4,
        Warrior = 1,
        Paladin = 2,
        Shaman = 7,
        Mage = 8,
        Priest = 5,
        DeathKnight = 6,
        Druid = 11,
        Warlock = 9,
        Monk = 10
    }

    public enum CharacterRace
    {
        NightElf = 4,
        Dwarf = 3,
        PandarenAlliance = 25,
        PandarenHorde = 26,
        Tauren = 6,
        Undead = 5,
        Orc = 2,
        Gnome = 7,
        Goblin = 9,
        Human = 1,
        Troll = 8,
        PandarenNeutral = 24,
        Draenei = 11,
        Worgen = 22,
        BloodElf = 10
    }

 

    public enum CharacterGender
    {
        Male = 0,
        Female = 1
    }

    public enum CharacterField
    {
        None = 0,
        [StringValue("achievements")]
        Achievements = 1,
        [StringValue("appearance")]
        Appearance = 2,
        [StringValue("feed")]
        Feed = 3,
        [StringValue("guild")]
        Guild = 4,
        [StringValue("hunterPets")]
        HunterPets = 5,
        [StringValue("items")]
        Items = 6,
        [StringValue("mounts")]
        Mounts = 7,
        [StringValue("pets")]
        Pets = 8,
        [StringValue("petSlots")]
        PetSlots = 9,
        [StringValue("professions")]
        Professions = 10,
        [StringValue("progression")]
        Progression = 11,
        [StringValue("pvp")]
        PVP = 12,
        [StringValue("quests")]
        Quests = 13,
        [StringValue("reputation")]
        Reputation = 14,
        [StringValue("stats")]
        Stats = 15,
        [StringValue("talents")]
        Talents = 16,
        [StringValue("titles")]
        Titles = 17
    }

    public enum GuildField
    {
        None = 0,
        [StringValue("members")]
        Members = 1,
        [StringValue("achievements")]
        Achievements = 2,
        [StringValue("news")]
        News = 3,
        [StringValue("challenge")]
        Challenge = 4
    }

    public enum ItemQuality
    {
        Junk = 0,
        Common = 1,
        Uncommon = 2,
        Rare = 3,
        Epic = 4,
        Legendary = 5,
        Heirloom = 7
    }

    public enum ItemClass
    {
        Consumable = 0,
        Container = 1,
        Weapon = 2,
        Gem = 3,
        Armor = 4,
        Regent = 5,
        Projectile = 6,
        TradeGoods = 7,
        Recipe = 9,
        Quiver = 11,
        Quest = 12,
        Key = 13,
        Miscellaneous = 15,
        Glyph = 16,
        BattlePets = 17
    }

    public enum InventorySlot
    {
        Ammo = 0,
        Head = 1,
        Neck = 2,
        Shoulder = 3,
        Shirt = 4,
        Chest = 5,
        Waist = 6,
        Legs = 7,
        Feet = 8,
        Wrists = 9,
        Hands = 10,
        Finger1 = 11,
        Finger2 = 12,
        Trinket1 = 13,
        Trinket2 = 14,
        Back = 15,
        MainHand = 16,
        OffHand = 17,
        Ranged = 18,
        Tabard = 19
    }

    public enum InventoryType
    {
        Back = 0,
        Chest = 20,
        Feet = 8,
        Ring = 11,
        Legs = 7,
        TwoHandedWeapon = 17,
        Neck = 2,
        Shoulders = 3,
        Trinket = 12,
        Wrists = 9,
        Belt = 6
    }

    public enum TimeLeft
    {
        Unknown = 0,
        [StringValue("SHORT")]
        Short = 1,
        [StringValue("MEDIUM")]
        Medium = 2,
        [StringValue("LONG")]
        Long = 3,
        [StringValue("VERY_LONG")]
        VeryLong = 4
    }

    public enum WebRequests
    {
        [StringValue("/api/wow/item/{0}")]
        Item = 1,
        [StringValue("/api/wow/item/set/{0}")]
        ItemSet = 2,
        [StringValue("/api/wow/character/{0}/{1}{2}")]
        Character = 3,
        [StringValue("/api/wow/guild/{0}/{1}{2}")]
        Guild = 4,
        [StringValue("/api/wow/auction/data/{0}")]
        AuctionFile = 5,
        [StringValue("{0}")]
        Auctions = 6,
        [StringValue("/api/wow/spell/{0}")]
        Spell = 7
    }

// ReSharper restore InconsistentNaming
}
